package com.aaa.jvmtest.classload.init;

/**
 * 利用初始化、匿名内部类完成懒惰式初始化
 *
 * @author Tu
 * @date 2022/9/4 18:04
 */
public class LazyHolderInit {
    public static void main(String[] args) {
        //调用普通静态方法并不会获取到对象，因为没有用到，只有调用getSingleton才会获取对象
        //Singleton.initTest();
        //第一次调用，会进行初始化获取对象。并且是线程安全的
        Singleton.getSingleton();
    }

}

class Singleton {

    //创建默认构造
    private Singleton() {
    }

    public static void initTest() {
        System.out.println("Singleton init");
    }

    public static Singleton getSingleton() {
        return LazyHolder.SINGLETON;
    }

    //创建匿名内部类
    private static class LazyHolder {
        private static final Singleton SINGLETON = new Singleton();

        static {
            System.out.println("lazy holder init");
        }
    }

}
